package com.cyf.filmDownload.common.util;

import org.apache.commons.lang3.StringUtils;

import java.net.MalformedURLException;
import java.net.URL;


public class UrlUtil {
    /**
     * 判断是否是 url
     * @param resourceLocation
     * @return
     */
    public static boolean isUrl(String resourceLocation) {
        if (StringUtils.isEmpty(resourceLocation)) {
            return false;
        }
        try {
            new URL(resourceLocation);
            return true;
        } catch (MalformedURLException var2) {
            return false;
        }
    }

    /**
     * 提取 协议 + 端口 + 域名
     * https://leduocdn.com/20240526/kxUW0oNe/1100kb/hls/uOBQtmhy.jpg =>
     * https://leduocdn.com
     * @param urlString
     * @return
     */
    public static String extractBaseURL(String urlString) {
        URL url = null;
        try {
            url = new URL(urlString);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
        String protocol = url.getProtocol(); // 获取协议，如 "http" 或 "https"
        String host = url.getHost(); // 获取主机名（即域名）
        int port = url.getPort(); // 获取端口号，如果没有明确指定则使用默认端口（如HTTP的80，HTTPS的443）

        // 如果端口不是默认端口，则需要将其添加到URL中
        String portPart = (port == -1) ? "" : ":" + port; // -1 表示使用默认端口

        return protocol + "://" + host + portPart; // 构造完整的URL（包括协议和域名）
    }

    /**
     * 格式化URL字符串，移除不必要的转义并标准化斜杠。
     * \/ 替换为 /
     * @param url 待格式化的原始URL字符串
     * @return 格式化后的URL字符串
     */
    public static String formatUrl(String url) {
        // 因为" \ "号的在正则中被赋予了特殊含义，所以当我们想在正则中匹配”\”时，需要加上转义变成“\\"。
        // 在java字符串中，如果想表示两个普通字符“\\”，同样需要为”\”加上转义字符，所以变成了“\\\\”。
        return url.replaceAll("\\\\/", "/");
    }
}
